package com.shop.controller;

import com.shop.pojo.Result;
import com.shop.pojo.User;
import com.shop.service.UserService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController //返回的结果都转成json格式
@RequestMapping("user")
public class UserController {
    //控制层调用service层
    @Autowired
    private UserService userService;

    @Autowired
    private JavaMailSender javaMailSender;

    /**
     * 发送验证码到邮箱
     * 如何接受参数:
     * 只要保证url中的key的名称和控制层方法的参数的名称
     * 高度保持一致即可
     * @return
     */
    @GetMapping("sendCode")
    public Result sendCode(String email, HttpServletRequest request) {
        //1. 判断email是否是存在的
        User user = userService.getUserByEmail(email);
        if (user == null) {
            //邮箱是不存在的
            return new Result("404", "email不存在!");
        }

        //说明邮箱是存在的 - 发送验证码
        //1. 定义一个对象,用来封装邮箱的信息
        SimpleMailMessage msg = new SimpleMailMessage();

        //信息如下:
        //发送方
        //TODO... 发送方的邮箱必须要yml文件中配置的username保持一致
        msg.setFrom("732420937@qq.com");
        //标题
        msg.setSubject("邮箱登录验证码");

        //正文内容
        //随机验证码[100000,999999]之间的随机整数
        int n = (int) (Math.random()*900000+1000000);
        //将int类型转换成String类型
        String code=String.valueOf(n);
        msg.setText(code);

        /**
         * 将code保存到session作用域
         * session作用域的生命周期是一次会话期间  浏览器打开 -- 浏览器关闭
         * 保存数据的格式也是key,value
         */
        HttpSession session=request.getSession();
        session.setAttribute(email,code);


        //TODO... email是从页面传入进来的
        //接收方
        msg.setTo(email);

        //发送
        javaMailSender.send(msg);

        return new Result("200", "发送验证码成功!");
    }


    /***
     *
     * @param code
     * @param email
     * @return
     */
   @PostMapping("login")
   public Result login(String code,String email,HttpServletRequest request){
       //1校验邮箱是否存在
       User user=userService.getUserByEmail(email);
       if (user == null) {
           //邮箱是不存在的
           return new Result("404", "email不存在!");
       }
            //邮箱存在
       //获取session对象
       HttpSession session=request.getSession();
       //根据key获取value
       String emailCode=(String)session.getAttribute(email);
       //当输入的code和邮箱中的code进行比较
       //字符串的比较建议使用equals方法
       if (code.equals(emailCode)) {
           return new Result("200","登录成功",user);
       }
       return new Result("500","验证码错误！");
   }
}
